import Axios from 'axios';
// import qs from 'qs'
/**
 * 根据环境变量区分接口的默认地址
 */
/* switch(process.env.NODE_ENV){
    case "production":
        axios.defaults.baseURL='';//生产环境
        break;
    case "test":
        axios.defaults.baseURL="";//测试url
        break;
    default:
        axios.defaults.baseURL="http://172.16.108.195:8081/admin";//开发环境下的URL
        break;

} */
let axios = Axios.create({
    timeout: 10000,
    baseURL:'http://172.16.108.195:8081/admin',
    withCredentials:false
  })
/**
 * 设置超时时间和跨域是否允许携带凭证
 */
// axios.defaults.timeout = 10000;//超时时间
// axios.defaults.withCredentials = true;//允许跨域

/**
 * 设置请求传递数据的格式(看服务器要求什么格式)
 * x-www-form-urlencoded
 */
/* axios.defaults.headers['Content-Type']='application/x-www-form-urlencoded';
axios.defaults.transformRequest=data=>qs.stringify(data); */

/**
 * 设置请求拦截器
 * 客户端发送请求 -->[请求拦截器]->服务器
 * TOKEN校验（JWT）:接收服务器返回的token 存储到vuex/或本地存储中，
 * 每一次向服务器发送请求，我们应该携带token
 */
axios.interceptors.request.use(config=>{
    //携带token
    let token =localStorage.getItem('token');
    token && (config.headers.token=token)
    return config;
},error=>{
    return Promise.reject(error);
});
/**
 * 响应拦截器
 * 服务器返回信息  ->[拦截的统一处理] -> 客户端Js获取到信息
 * 
 */

/* axios.defaults.validateStatus=status=>{
 //自定义响应成功的HTTP状态码
    return /^(2|3)\d{2}$/.test(status);

}; */
axios.interceptors.response.use(response=>{
    let token =localStorage.getItem('token');
    token && (response.headers.token=token)
    // console.log(response)
   return response.data;//返回响应的data数据，其它不返回(根据公司需求完善)
},error=>{
    //请求已经发送，只不过状态码不是200系列，设置不同的状态码的不同处理
    let {response} =error;
    if(response){
        //服务器最起码返回结果了
        switch(response.status){
            case 401:// =》权限  当前请求用户需要验证
                break;
            case 403://服务器拒绝执行（一般是token过期）
                localStorage.removeItem('token');//移除token
                //跳转到登录页
                break;
            case 404://=>找不到页面
                break;
            default:
                break;
        }
    }else{
        //服务器连结果都没有返回
        if(!window.navigator.onLine){
            //断网处理，可以跳转到断网页面
            return;
        }
        return Promise.reject(error);//服务器问题
    }
});

export default axios;//暴露